// 版权归Go作者所有。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:build aix | darwin | freebsd | linux | netbsd | openbsd | solaris 
// /+build aix darwin freebsd linux netbsd openbsd solaris 

package syscall

import (
	"runtime"
)

// 将原始sockaddr的长度四舍五入以正确对齐。
func cmsgAlignOf(salen int) int {
	salign := sizeofPtr

	// dragonfly需要在运行时检查ABI版本，请参阅
	// sockcmsg_dragonfly.go 
	switch runtime.GOOS {
	case "aix":
		// AIX上没有对齐。
		salign = 1
	case "darwin", "ios", "illumos", "solaris":
		// 注意：64位的Darwin、Illumos和Solaris 
		// 内核仍然需要对网络进行32位对齐访问
		// 子系统。
		if sizeofPtr == 8 {
			salign = 4
		}
	case "netbsd", "openbsd":
		// NetBSD和OpenBSD armv7需要64位对齐。
		if runtime.GOARCH == "arm" {
			salign = 8
		}
		// NetBSD aarch64需要128位对齐。
		if runtime.GOOS == "netbsd" && runtime.GOARCH == "arm64" {
			salign = 16
		}
	}

	return (salen + salign - 1) & ^(salign - 1)
}
